﻿using System.Collections.Generic;

using Inovout.Cloud.DataStore.Models;
using Inovout.Cloud.Models;

namespace Inovout.Cloud.DataStore.Services
{
    /// <summary>
    /// 数据库
    /// </summary>
    public interface IDatabaseService
    {
        /// <summary>
        /// 创建数据库
        /// </summary>
        /// <param name="database">数据库信息</param>
        /// <returns>数据库信息</returns>
        Database CreateDatabase(Database database);

        /// <summary>
        /// 删除数据库
        /// </summary>
        /// <param name="database">数据库</param>
        void DropDatabase(Database database);

        /// <summary>
        /// 删除数据库
        /// </summary>
        /// <param name="project">数据库所属项目</param>
        /// <param name="databaseName">数据库名</param>
        void DropDatabaseByName(Project project, string databaseName);

        /// <summary>
        /// 取得某个项目下的所有数据库信息
        /// </summary>
        /// <param name="project">项目信息</param>
        /// <returns>某个项目的所有数据库信息</returns>
        IEnumerable<Database> FindAllByProject(Project project);

        /// <summary>
        /// 取得所有数据库信息
        /// </summary>
        /// <returns>所有数据库信息</returns>
        IEnumerable<Database> GetAllDatabases();

        /// <summary>
        /// 取得某个数据库信息
        /// </summary>
        /// <param name="databaseName">数据库名</param>
        /// <returns>数据库信息</returns>
        Database FindByName(string databaseName);

        /// <summary>
        /// 删除某个项目的所有数据库
        /// </summary>
        /// <param name="project"></param>
        void DropAllDatabases(Project project);

        /// <summary>
        /// 判断数据库是否存在
        /// </summary>
        /// <param name="path">数据库地址</param>
        bool Exists(string path);
    }
}
